package com.dinetech.ejecutor;

import java.util.ArrayList;

import com.dinetech.dao.SpinnerVariosAdapter;
import com.dinetech.dao.UbicacionAdapter;
import com.dinetech.dao.WSEvento;
import com.dinetech.entidades.Eventos;
import com.dinetech.entidades.Personal;
import com.dinetech.entidades.Session;
import com.dinetech.entidades.Ubicacion;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemSelectedListener;

public class EventoMortalidad extends Fragment implements OnClickListener {

	private static final String ID_GALPON="idGalpon";
	private static final String TIPO_NIVEL="Nivel";
	Spinner cbxUbicMortalidad, cbxRespMortalidad;
	EditText txtCantM, txtCantH, txtCantG, txtObs, txtCantAb, txtCantNM;
	Button btnGrabarM;
	Personal perM = Personal.getInstance();
	int idUsuario, idUbicacion, idGalpon, nivel, idReproductor;
	String codGenero;
	Session seM= Session.getInstance();
	ArrayList<Eventos> listCantPoblacion;
	
	public static EventoMortalidad newInstance (int IdGalpon, int Nivel){
		
		EventoMortalidad eventoM = new EventoMortalidad();
		
		Bundle bundle = new Bundle();
		bundle.putInt(ID_GALPON, IdGalpon);
		bundle.putInt(TIPO_NIVEL, Nivel);
		eventoM.setArguments(bundle);
		eventoM.setRetainInstance(true);
		
		return eventoM;
	}
	
	
	@Override
	public void onActivityCreated(Bundle savedInstanceState) {
		super.onActivityCreated(savedInstanceState);

	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		
		ViewGroup view = (ViewGroup)inflater.inflate(R.layout.evento_mortalidad,container, false);
		
		cbxUbicMortalidad = (Spinner)view.findViewById(R.id.cbxPozaM);
		cbxRespMortalidad = (Spinner)view.findViewById(R.id.cbxResponsableM);
		txtCantM = (EditText)view.findViewById(R.id.txtCantMachosM);
		txtCantH = (EditText)view.findViewById(R.id.txtCantHembrasM);
		txtCantG = (EditText)view.findViewById(R.id.txtCantGazaposM);
		txtCantAb = (EditText)view.findViewById(R.id.txtCantAborto);
		txtCantNM = (EditText)view.findViewById(R.id.txtCantNacidoM);
		txtObs = (EditText)view.findViewById(R.id.txtComentarioM);
		btnGrabarM = (Button)view.findViewById(R.id.btnMortalidad);
		btnGrabarM.setOnClickListener(this);
		this.idGalpon = getArguments().getInt(ID_GALPON);
		this.nivel = getArguments().getInt(TIPO_NIVEL);
		new listarUbicacion().execute();
		llenarSpinner();
		
		if(nivel==2){
			TextView lbl1 = (TextView)view.findViewById(R.id.lblPozaM);
			lbl1.setText("Codigo - Sexo - Ubicación");
			LinearLayout ll1 =(LinearLayout)view.findViewById(R.id.linearCantMM);
			LinearLayout ll2 =(LinearLayout)view.findViewById(R.id.linearCantHM);
			
			ll1.setVisibility(View.INVISIBLE);
			ll2.setVisibility(View.INVISIBLE);	
		}
		
		return view;
	}

	private void refrescarMortalidad(){
		new listarUbicacion().execute();
		llenarSpinner();
		txtObs.setText("");
		txtCantH.setText("");
		txtCantG.setText("");		
		txtCantM.setText("");
		txtCantAb.setText("");
		txtCantNM.setText("");
	}
	
	
	
	private void llenarSpinner(){
		
		SpinnerVariosAdapter adaptadorRespM = new SpinnerVariosAdapter(EventoMortalidad.this, seM.getLISTA_RESPONSABLE());
		cbxRespMortalidad.setAdapter(adaptadorRespM);
		cbxRespMortalidad.setOnItemSelectedListener(new SpinnerListenerResp());
		
		
		for(int i=0; i <  adaptadorRespM.getCount(); i++){
			int idRA=(int)(long)adaptadorRespM.getItemId(i) ;
			idUsuario = perM.getIdPersonal();
			if( idRA == idUsuario){
				cbxRespMortalidad.setSelection(i);					
			}	        
		}
		
	}
	
	public class SpinnerListenerUbic implements OnItemSelectedListener {
	      
        public void onItemSelected(AdapterView<?> parent,
            View view, int pos, long id) {
        
            int convert=Integer.parseInt( Long.toString(id));
            idUbicacion= convert;	  
            
            if(nivel==2){
            	if(idUbicacion > 0){
	            	TextView reprod = (TextView)view.findViewById(R.id.lblIdReproductorSpinner); 
	            	TextView CodGenero = (TextView)view.findViewById(R.id.lblCodSexoSpinner);
	            	idReproductor = Integer.parseInt(reprod.getText().toString());
	            	codGenero = CodGenero.getText().toString();
            	}
            }
            
            if(idUbicacion==0){
				btnGrabarM.setEnabled(false);
			}else{
				new obtenerCantPoblacion().execute(idUbicacion, idGalpon);
			}
            
            
        }

		@Override
		public void onNothingSelected(AdapterView<?> arg0) {
			
			
		}
	}
	
	public class SpinnerListenerResp implements OnItemSelectedListener {
	      
        public void onItemSelected(AdapterView<?> parent,
            View view, int pos, long id) {
        
            int convert=Integer.parseInt( Long.toString(id));
            idUsuario= convert;	            	         
        }

		@Override
		public void onNothingSelected(AdapterView<?> arg0) {
			
			
		}
	}
	
	private class listarUbicacion extends AsyncTask<String, Void, ArrayList<Ubicacion>>{

		@Override
		protected ArrayList<Ubicacion> doInBackground(String... params) {
			ArrayList<Ubicacion> listaUbicacion = null;
			WSEvento wsE = new WSEvento();
			
			if(nivel == 1){
				listaUbicacion = wsE.ubicacionPorEvento("03", idGalpon, 0, 0, 1, 0, perM.getIdSucursal());
			}else if(nivel == 2){
				listaUbicacion = wsE.listarReproductores(perM.getIdGranja(), perM.getIdSucursal(), idGalpon, "03");
			}
			return listaUbicacion;
		}

		@Override
		protected void onPostExecute(ArrayList<Ubicacion> result) {
			super.onPostExecute(result);
			
			UbicacionAdapter adaptadorUbic = new UbicacionAdapter(EventoMortalidad.this, result);
			cbxUbicMortalidad.setAdapter(adaptadorUbic);
			cbxUbicMortalidad.setOnItemSelectedListener(new SpinnerListenerUbic());
			
			
		}
		
	}
	
	private class obtenerCantPoblacion extends AsyncTask<Integer, Void, ArrayList<Eventos>>{

		@Override
		protected ArrayList<Eventos> doInBackground(Integer... params) {
			ArrayList<Eventos> listaUbicacion;
			WSEvento wsE = new WSEvento();
			
			listaUbicacion = wsE.cantidadDePoblacionPorUbicacion(params[0], params[1]);
			
			return listaUbicacion;
		}

		@Override
		protected void onPostExecute(ArrayList<Eventos> result) {
			super.onPostExecute(result);
			
			listCantPoblacion = result;

		}
		
	}
	
	private class grabarM extends AsyncTask<String, Void, String>{
		
		
		@Override
	    protected String doInBackground(String... urls) {

	    	WSEvento we= new WSEvento();
	    	String Msg="";
	    	
	    	if(nivel == 1){
	    		Msg = we.grabarEvento("01", "03", "0", "0", seM.obtenerFechaActual(), String.valueOf(idUbicacion), "0", 
	    			Integer.parseInt(txtCantM.getText().toString()), Integer.parseInt(txtCantH.getText().toString()), 
	    			Integer.parseInt(txtCantG.getText().toString()), "0", "0", "0", "0", 0, txtObs.getText().toString(), 
	    			idUsuario, seM.obtenerFechaActual2(), perM.getIdPersonal(), 0, "0", perM.getIdSucursal(), idGalpon,0,0);
	    	
	    	}else if(nivel == 2){
	    		Msg = we.grabarEvento("02", "03", "0", "0", seM.obtenerFechaActual(), String.valueOf(idUbicacion), "0", 
		    			0, 0, Integer.parseInt(txtCantG.getText().toString()), "0", "0", "0", "0", idReproductor, txtObs.getText().toString(), 
		    			idUsuario, seM.obtenerFechaActual2(), perM.getIdPersonal(), 0, "0", perM.getIdSucursal(), idGalpon,0,0);
	    	}
	    	return Msg;
	        	
	    }

	    @Override
	    protected void onPostExecute(String resultadoWS) {
	        super.onPostExecute(resultadoWS);	
	         
	        Toast msg = Toast.makeText(getActivity(), resultadoWS, Toast.LENGTH_LONG);
	        msg.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
	        msg.show();
	        refrescarMortalidad();
	        
	    }
	}

	
	private void mostrarAlerta(String msg){
		
		AlertDialog.Builder alerta = new AlertDialog.Builder(getActivity());		
		alerta.setTitle("Alerta");
		alerta.setMessage(msg);
		alerta.setPositiveButton("OK", 
				new DialogInterface.OnClickListener() {
		     public void onClick(DialogInterface dialog, int which) {
		     }
		    });
		alerta.show();
	}
	
	@Override
	public void onClick(View v) {
		
		if(txtCantM.getText().length() == 0){
			txtCantM.setText("0");
		}
		if(txtCantH.getText().length() == 0){
			txtCantH.setText("0");
		}
		if(txtCantG.getText().length() == 0){
			txtCantG.setText("0");
		}
		if(txtCantAb.getText().length() == 0){
			txtCantAb.setText("0");
		}
		if(txtCantNM.getText().length() == 0){
			txtCantNM.setText("0");
		}
		
		int canTotal = Integer.parseInt(txtCantM.getText().toString()) + Integer.parseInt(txtCantH.getText().toString()) + Integer.parseInt(txtCantG.getText().toString()) + 
				Integer.parseInt(txtCantAb.getText().toString()) + Integer.parseInt(txtCantNM.getText().toString()); 
		String msgMortalidad="";
		
		if(canTotal < 1){
			mostrarAlerta("La cantidad de animales muertos ingresados debe ser mayor a 1");
		}
		else{	
			
			
			if(Integer.parseInt(txtCantM.getText().toString()) > listCantPoblacion.get(0).getCantMachos()){
				msgMortalidad = msgMortalidad + "● La cantidad ingresada de machos muertos exede a la cantidad de machos existente\n";
				
			}
			if(Integer.parseInt(txtCantH.getText().toString()) > listCantPoblacion.get(0).getCantHembras()){
				msgMortalidad = msgMortalidad + "● La cantidad ingresada de hembras muertas exede a la cantidad de hembras existente\n";				
				
			}
			if(Integer.parseInt(txtCantG.getText().toString()) > listCantPoblacion.get(0).getCantGazapos()){
				msgMortalidad = msgMortalidad + "● La cantidad ingresada de gazapos muertos exede a la cantidad de gazapos existente\n";
				
			}
			if(msgMortalidad.matches("")){
				new grabarM().execute();
			}
			else{
				mostrarAlerta(msgMortalidad);
			}			
			
		}
		
		txtCantM.requestFocus();
	}

	
}
